﻿using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI_Demo.Filter
{
    /// <summary>
    /// 资源缓存判断(利用资源过滤器达到目的)
    /// </summary>
    // 实现资源的缓存
    // 请求一个数据接口时
    // 如果这个数据没有进行缓存 执行接口方法 获取数据 返回结果 缓存下结果
    // 下一次请求 判断是否有缓存 如果有 直接获取缓存数据 返回结果
    public class CustomerResourceFilter : Attribute, IResourceFilter
    {
        /// <summary>
        /// 静态资源static 字典类型 key - value
        /// </summary>
        private static Dictionary<string, object> cacheDic = new Dictionary<string, object>();

        /// <summary>
        /// 资源执行时的方法 方法执行前去执行的
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            //获取接口方法的请求路径 不同方法 数据不一样 A请求 获取A接口的数据
            var path = context.HttpContext.Request.Path;
            //如果缓存上有这个接口的数据
            if (cacheDic.ContainsKey(path))
            {
                //获取数据 返回结果
                context.Result = (IActionResult)cacheDic[path];
            }
            //日志打印
            Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuting");
        }
        /// <summary>
        /// 资源执行后的方法 方法执行后去执行的
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            //路径的数据
            var path = context.HttpContext.Request.Path;
            //保存数据
            cacheDic[path] = context.Result;
            Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuted");
        }
    }
}
